
const BASE_URL = "http://localhost:3001";
export default function request({
    //自己封装的请求，返回promise对象
    url,
    method,
    data,
    onProgress = (e) => e,
    headers = {},
    requestList, // 上传的文件列表
}) {
    return new Promise((resolve,reject) => {
        const xhr = new XMLHttpRequest();
        /*
        获取切片上传的进度
        XMLHttpRequest 原生支持上传进度的监听，
        只需要监听 upload.onprogress 即可，
        我们在原来的 request 基础上传入 onProgress 参数，
        给 XMLHttpRequest 注册监听事件
         */
        xhr.upload.onprogress = onProgress; //上传时的处理函数
        xhr.open(method, BASE_URL + url);

        Object.keys(headers).forEach((key) => {
            xhr.setRequestHeader(key, headers[key]); //添加请求头
        });
        //
        xhr.send(data);
        xhr.onerror=(e)=>{
            reject('报错了 大哥,错误信息：',e.message,e);
        }
        // xhr.ontimeout=(e)=>{
        //     reject('xhr超时了,错误信息：',e);
        // }

        /*
        xhr.onload = (e) => {
            // console.log(e.target.response, "++++123+++");
            if (requestList) {
                // 将请求成功的 xhr 从列表中删除
                const xhrIndex = requestList.findIndex(item => item === xhr);
                requestList.splice(xhrIndex, 1);
            }
            // 加载完成后
            // console.log("request - xhr - onload----");
            // console.log(e);
            resolve({
                data: e.target.response
            });
        };*/
        xhr.onreadystatechange = e => {
            if(xhr.readyState === 4) {
                if(xhr.status === 200){
                    if(requestList){
                         // 将请求成功的 xhr 从列表中删除
                        const i = requestList.findIndex(item=>item===xhr);
                        requestList.splice(i, 1);
                    }
                    resolve({
                        data: e.target.response
                    });
                }else if(xhr.status === 500){
                    console.log('request报错了 xhr.status',xhr.status);
                    reject('报错了 大哥')
                }
              }
        };
        // 暴露当前 xhr 给外部
        if (requestList) {
            requestList.push(xhr); // 每个请求
            // console.log(requestList);
        }
    });
}